package gob.osinerg.emergencia.action;

import gob.osinerg.emergencia.bean.ActividadBean;
import gob.osinerg.emergencia.bean.Formulario;
import gob.osinerg.emergencia.bean.FormularioEmergDetalle;
import gob.osinerg.emergencia.bean.FormularioEmergencia;
import gob.osinerg.emergencia.bean.MailBean;
import gob.osinerg.emergencia.bean.UnidadOperativaBean;
import gob.osinerg.emergencia.bean.UsuarioBean;
import gob.osinerg.emergencia.form.FormularioEmergenciaForm;
import gob.osinerg.emergencia.service.DominioService;
import gob.osinerg.emergencia.service.FormularioEmergenciaService;
import gob.osinerg.emergencia.service.GenericService;
import gob.osinerg.emergencia.util.Constants;
import gob.osinerg.emergencia.util.Converter;
import gob.osinerg.emergencia.util.Util;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;



public class FormularioEmergenciaAction extends GenericAction{
	
	private Log log = LogFactory.getLog(FormularioEmergenciaAction.class);
	private FormularioEmergenciaService service;
	private DominioService dominioService;
	private GenericService genericService;
	
	public ActionForward inicio(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		
		
		System.out.println("INICIO FormularioEmergenciaAction");
		
		HttpSession session = request.getSession();
		
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		FormularioEmergencia bean = new FormularioEmergencia();
		bean.setFormulario(new Formulario());
		f.setBean(bean);
		f.setListTipoEmergencia(new ArrayList());
		f.setListTipoInforme(dominioService.selectByDominio("EMERG_TIPO_FORM"));
		f.setFchaEmrgncia("");
		f.setLista(new ArrayList());
		f.setListaRespuestaMasivo(new ArrayList());

		session.setAttribute("TipoEmergencia", ListToMap(dominioService.selectByDominio("EMERG_TIPO")));
		session.setAttribute("TipInforme", ListToMap(f.getListTipoInforme()));
		return actionMapping.findForward("inicio");
	}
	
	public ActionForward buscar(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		
		HttpSession session = request.getSession();
		UsuarioBean usuario = (UsuarioBean)session.getAttribute("UsuarioBean");
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		
		FormularioEmergencia bean = (FormularioEmergencia)f.getBean();
		if(!StringUtils.isEmpty(f.getFchaEmrgncia())){
			bean.setFchaEmrgncia(Converter.stringToDate(f.getFchaEmrgncia(),"dd/MM/yyyy"));
		}
		bean.setUsrioCrdor(usuario.getCodigoLogin());
		f.setLista(service.findEmergencia(bean));
		
		
		return actionMapping.findForward("inicio");
	}
	
	public ActionForward consultar(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		HttpSession session = request.getSession();
    	String index =request.getParameter("sel"); //"51";
    	if(StringUtils.isEmpty(index)){
    		index = (String)request.getAttribute("sel");
    	}
    	String flagMesaPartes = request.getParameter("flagMesaPartes");
    	List lista = new ArrayList();

	    		    
		if(!StringUtils.isEmpty(index)){
	    	FormularioEmergencia formuEmrg = (FormularioEmergencia)f.getLista().get(Integer.parseInt(index));
	    		List listaGeneral =service.getListaRespuestasGeneral(formuEmrg.getId());
	    		f.setMapa(generarFormularioRespuestas(listaGeneral));
				//List listaCategorias = service.getCategoriaConsulta(formuEmrg.getId());
				/*for(int i=0;i<listaCategorias.size();i++){
					Map mapaCategoria = (Map)listaCategorias.get(i);
					List listatemp = new ArrayList();
					List listaSecciones = service.getSeccionConsulta(formuEmrg.getId(), mapaCategoria.get("CAT_ID").toString());
					for(int j=0;j<listaSecciones.size();j++){
						Map mapaSecciones = (Map)listaSecciones.get(j);
						List listaRespuestas = service.getFormularioRespuestas(formuEmrg.getId(), mapaSecciones.get("SECC_ID").toString());
						mapaSecciones.put("lista", listaRespuestas);
						listatemp.add(mapaSecciones);
					}
					mapaCategoria.put("lista", listatemp);
					lista.add(mapaCategoria);
				}*/
			
				//f.setLista(listaCategorias);
				f.setBean(formuEmrg);
		 }
		
		
		
		return actionMapping.findForward("consulta");
	}
	
	public ActionForward agregarFormulario(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		
		Enumeration elementos = request.getParameterNames(); 	
    	List lista= new ArrayList();
    
	    	while (elementos.hasMoreElements()){
	    		try{
	    			String opcionName = elementos.nextElement().toString();
	    			String valorOpcion = request.getParameter(opcionName);
	    			System.out.println("Opcion : "+opcionName +"  Valor de la Opcion : "+valorOpcion);
	    			addRespuestasLista(lista,opcionName,valorOpcion);    			
	    		}catch (Exception e) {
					log.error(e);
				}    		
	    	}
		
	    f.getListaRespuestaMasivo().add(lista);
	    	
		return actionMapping.findForward("regformularioMasivo");
	}
	
	public ActionForward nuevo(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		HttpSession session = request.getSession();
    	ActividadBean actividad = (ActividadBean)session.getAttribute("ActividadBean");
    	Long idUniFis =  service.getUniFisIdParaUsuario(actividad.getCodigo());
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		f.setBean(new FormularioEmergencia());
		
		if(idUniFis.equals(new Long(0))){
    		f.setListTipoEmergencia(new ArrayList());
    	}else if(idUniFis.equals(new Long(1))){
    		f.setListTipoEmergencia(service.getBusquedaTipoEmergencia("EMERG_TIPO","1"));
    	}else{
    		f.setListTipoEmergencia(service.getBusquedaTipoEmergencia("EMERG_TIPO","0"));
    	}
		
		return actionMapping.findForward("nuevo");
	}
	
	public ActionForward selecionarTipoInforme(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		ActionMessages mensage = new ActionMessages();
		HttpSession session = request.getSession();
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		UnidadOperativaBean unidadOperativa = (UnidadOperativaBean)session.getAttribute("UnidadOperativaBean");
    	UsuarioBean usuario = (UsuarioBean)session.getAttribute("UsuarioBean");
    	ActividadBean actividad = (ActividadBean)session.getAttribute("ActividadBean");
    	String forward="nuevo";
		String tipoEmergencia = request.getParameter("tipoEmergencia");
    	String tipoInforme =request.getParameter("tipoInforme");
		FormularioEmergencia bean = (FormularioEmergencia)f.getBean();
    	Formulario formulario = new Formulario();
		formulario.setTpoEmrgncia(tipoEmergencia);
		formulario.setTpoInfrme(tipoInforme);
		formulario.setActiviId(new Long(actividad.getCodigo()));//Informacion del usuario
		formulario.setUnifisId(service.getUniFisIdParaUsuario(actividad.getCodigo()));//Informacion del usuario
		
		List list = genericService.getFindCriteria(formulario);
		if(list.size()>0){
			formulario = (Formulario)list.get(0);
			//OPTIMIZANDO FORMULARIO
			List listaGeneral = service.getListaGeneral(formulario.getId());
			f.setMapa(generarFormulario(listaGeneral));
			
	    	/*List listaCatergorias = service.getCategorias(String.valueOf(formulario.getId()));
	    	List lista = new ArrayList();
	    	for (int i = 0;i<listaCatergorias.size();i++){
	    		Map mapaCategoria = (Map) listaCatergorias.get(i);
	    		List listaSeccion = service.getSecciones(String.valueOf(formulario.getId()),String.valueOf(mapaCategoria.get("CAT_ID")));
	    		List listaTemp = new ArrayList();
	    		for(int j=0;j<listaSeccion.size();j++){
	    			Map mapaSecciones = (Map) listaSeccion.get(j);
	    			List listaOpciones = service.getOpciones(String.valueOf(formulario.getId()),String.valueOf(mapaSecciones.get("CAT_ID")),String.valueOf(mapaSecciones.get("SECC_ID"))); 
	    			mapaSecciones.put("lista", listaOpciones);
	    			listaTemp.add(mapaSecciones);
	    		}
	    		mapaCategoria.put("lista", listaTemp);
	    		lista.add(mapaCategoria);
	    	}*/
	    	
	    	FormularioEmergencia formu = new FormularioEmergencia();
	    	formu.setFormulario(formulario);
	    	f.setBean(formu);
	    	//f.setLista(listaCatergorias);
	    	
	    	if (tipoInforme.equals("REP")){//REPORTE
				forward = "regformularioMasivo";
				f.setListaRespuestaMasivo(new ArrayList());
				Map listaCamposReporte = service.getCamposReporte(formulario.getId());
				f.setMapaCamposReporte(listaCamposReporte);
			}else{
				forward = "regformulario";

			}
		}else{
			PropertyUtils.setProperty(f.getBean(), "tpoEmrgncia", "");
			//No EXiste el Formulario o Aun no ha sido ingresao al Sistema
			mensage.add(Globals.ERROR_KEY, new ActionMessage("emergencias.noTiene.informeRegistrado"));
			saveErrors(request, mensage);
		}
		return actionMapping.findForward(forward);
	}
	
	public ActionForward formularioFinal(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		
		ActionMessages mensage = new ActionMessages();
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		String index = request.getParameter("sel");
		String forward = "inicio";
		if(!StringUtils.isEmpty(index)){
			FormularioEmergencia bean = (FormularioEmergencia)f.getLista().get(Integer.parseInt(index));
			
			//Validamos si este informe ya tiene registrado un informe final
			boolean existe = service.getExisteFormularioFinal(bean);
			if(!existe){
				Formulario formulario = new Formulario();
				formulario.setTpoInfrme(Constants.TIPO_INFORME_FINAL);
				formulario.setActiviId(bean.getFormulario().getActiviId());
				formulario.setUnifisId(bean.getFormulario().getUnifisId());
				formulario.setTpoEmrgncia(bean.getTpoEmrgncia());
				
				List listaFormu = genericService.getFindCriteria(formulario);
				
						if(listaFormu.size()>0){
							formulario = (Formulario)listaFormu.get(0);
							List listaGeneral = service.getListaGeneral(formulario.getId());
							f.setMapa(generarFormulario(listaGeneral));
							/*List listaCatergorias = service.getCategorias(String.valueOf(formulario.getId()));
					    	List lista = new ArrayList();
					    	for (int i = 0;i<listaCatergorias.size();i++){
					    		Map mapaCategoria = (Map) listaCatergorias.get(i);
					    		List listaSeccion = service.getSecciones(String.valueOf(formulario.getId()),String.valueOf(mapaCategoria.get("CAT_ID")));
					    		List listaTemp = new ArrayList();
					    		for(int j=0;j<listaSeccion.size();j++){
					    			Map mapaSecciones = (Map) listaSeccion.get(j);
					    			List listaOpciones = service.getOpciones(String.valueOf(formulario.getId()),String.valueOf(mapaSecciones.get("CAT_ID")),String.valueOf(mapaSecciones.get("SECC_ID"))); 
					    			mapaSecciones.put("lista", listaOpciones);
					    			listaTemp.add(mapaSecciones);
					    		}
					    		mapaCategoria.put("lista", listaTemp);
					    		lista.add(mapaCategoria);
					    	}*/
					    	//f.setLista(listaCatergorias);
					    	bean.setFormulario(formulario);
					    	f.setBean(bean);
					    	forward= "regformulario";
					
					}else{
						//No EXiste el Formulario o Aun no ha sido ingresao al Sistema
						mensage.add(Globals.ERROR_KEY, new ActionMessage("emergencias.noTiene.informeRegistrado"));
						saveErrors(request, mensage);	
						
				}
			}else{
				//Ya Tiene registrado un Informe FInal
				mensage.add(Globals.ERROR_KEY, new ActionMessage("emergencias.tiene.informeRegistrado"));
				saveErrors(request, mensage);	
			}
		}
		
		
		return actionMapping.findForward(forward);
	}
	
	public ActionForward grabarInforme(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		
		HttpSession session = request.getSession(true);
		UnidadOperativaBean unidadOperativa = (UnidadOperativaBean)session.getAttribute("UnidadOperativaBean");
    	UsuarioBean usuario = (UsuarioBean)session.getAttribute("UsuarioBean");
    	ActividadBean actividad = (ActividadBean)session.getAttribute("ActividadBean");
    	
    	FormularioEmergencia bean = (FormularioEmergencia)f.getBean();
    	Enumeration elementos = request.getParameterNames(); 	
    	List lista= new ArrayList();
    
	    	while (elementos.hasMoreElements()){
	    		try{
	    			String opcionName = elementos.nextElement().toString();
	    			String valorOpcion = request.getParameter(opcionName);
	    			addRespuestasLista(lista,opcionName,valorOpcion);    			
	    		}catch (Exception e) {
					log.error(e);
				}    		
	    	}
	    	
   	
	    	FormularioEmergencia form = new FormularioEmergencia();
	    	
	    	if(bean.getNmroEmrgncia()== null ){
	    		form.setNmroEmrgncia(service.getNumeroEmergencia(bean.getFormulario().getUnifisId()));
	    	}else{
	    		form.setNmroEmrgncia(bean.getNmroEmrgncia());
	    	}
	    	form.setFrmlarioId(bean.getFormulario().getId());
	    	form.setMdioInfrmtvo("");
	    	form.setCdgoOsinerg(unidadOperativa.getCodigoOsinerg());
	    	form.setTpoEmrgncia(bean.getFormulario().getTpoEmrgncia());//LO TRAE DE SESSION
	    	form.setEstado("GE");
	    	form.setUniopeId(new Long(unidadOperativa.getCodigo()));
	    	form.setActiviId(bean.getFormulario().getActiviId());
	    	form.setUnifisId(bean.getFormulario().getUnifisId());
	    	form.setRzonSocial(unidadOperativa.getNombreComercial());
	    	form.setNmroMsaPrtes(service.getNumeroMesaParte(new Long(unidadOperativa.getCodigo()), bean.getFormulario().getUnifisId()));
	    	form.setFlag("0");
	    	//form.setFchaEmrgncia(fchaEmrgncia)
	    	form.setFchaCrcion(new Date());
	    	form.setUsrioCrdor(usuario.getCodigoLogin());
	    	//Grabamos
	    	genericService.save(form);
	    	service.grabarInformeRespuestasLista(form,lista);
	    	
	    	//ENVIO DE MAILS
			ResourceBundle rb = ResourceBundle.getBundle("gob.osinerg.resources.sendMail");
	        String subject = rb.getString("mail.emergencia.subject");
	        String mensaje = rb.getString("mail.emergencia.text");
	        String fromAdministrador = rb.getString("mail.from.administrador");
	        List listEmail = service.getUsuariosParaEnvioMail(bean.getFormulario());
	        for (int i=0;i<listEmail.size();i++){
	        	
	        	Object obj = listEmail.get(i);
	        	MailBean mailBean = new MailBean();
	        	mailBean.setSubject(subject);
	        	mailBean.setMensaje(mensaje);
	        	mailBean.setFromMail(fromAdministrador);
	        	mailBean.setFromName(" ");
	        	mailBean.setToMail(BeanUtils.getProperty(obj, "MAIL"));
	        	mailBean.setToName(" ");
	        	log.debug("Envio de Mails Configurados a : "+BeanUtils.getProperty(obj, "MAIL"));
	        	service.procesarMail(mailBean);
	        }
		    
	        //ENVIO DE MAIL A SUPERVISOR REGIONAL
	        if (Constants.UNIFISID_PARA_ENVIO_MAIL_SUPERVISOR.equals(String.valueOf(bean.getFormulario().getUnifisId()))){
	        	log.debug("Inicio Envio de Mails a Supervisores Regionales");
	        	String cadena = service.getZonaFiscaliazable(new Long(unidadOperativa.getCodigo()),"1");
	        	if(!StringUtils.isEmpty(cadena)){
	        	String[] cadenaZonaFis = cadena.split("-");
	        	
	        	List listaSupervisor = service.getMailSupervisor(cadenaZonaFis[0]);
	        	
		        	for(int i=0 ;i<listaSupervisor.size();i++){
		        		Object obj = listaSupervisor.get(i);
		        		MailBean mailBean = new MailBean();
		        		mailBean.setSubject(subject);
		            	mailBean.setMensaje(mensaje);
		            	mailBean.setFromMail(fromAdministrador);
		            	mailBean.setFromName(" ");
		            	mailBean.setToMail(BeanUtils.getProperty(obj, "MAIL_SPRVSR_RGNAL"));
		            	mailBean.setToName(" ");
		        		service.procesarMail(mailBean);
	        		}
	        	}
	        }
	        
	        //SETEAMOS EL FORMULARIO A LA LISTA
	        f.setLista(new ArrayList());
	        form.setFormulario(bean.getFormulario());
	        f.getLista().add(form);
	        request.setAttribute("flagConstancia", Boolean.TRUE);
	        request.setAttribute("sel", "0");
	   return consultar(actionMapping, actionForm, request, response);//new ActionForward("consultar");//actionMapping.findForward("nuevo");
	 
	}
    
	public ActionForward grabarInformeMasivo(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
		
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		
		HttpSession session = request.getSession(true);
		UnidadOperativaBean unidadOperativa = (UnidadOperativaBean)session.getAttribute("UnidadOperativaBean");
		UsuarioBean usuario = (UsuarioBean)session.getAttribute("UsuarioBean");
		ActividadBean actividad = (ActividadBean)session.getAttribute("ActividadBean");
    	
    	FormularioEmergencia bean = (FormularioEmergencia)f.getBean();
    	Enumeration elementos = request.getParameterNames(); 	
    	//OBTENEMOS EL NUMERO DE MESA PARTES
    	String nroMesaPartes = service.getNumeroMesaParte(new Long(unidadOperativa.getCodigo()), bean.getFormulario().getUnifisId());
	    	
    	FormularioEmergencia form = new FormularioEmergencia();	
		for(int i=0;i<f.getListaRespuestaMasivo().size();i++){
			
			List lista = (List)f.getListaRespuestaMasivo().get(i);
	
	    	form = new FormularioEmergencia();
	    	form.setNmroEmrgncia(service.getNumeroEmergencia(bean.getFormulario().getUnifisId()));
	    	form.setFrmlarioId(bean.getFormulario().getId());
	    	form.setMdioInfrmtvo("");
	    	form.setCdgoOsinerg(unidadOperativa.getCodigoOsinerg());
	    	form.setTpoEmrgncia(bean.getFormulario().getTpoEmrgncia());//LO TRAE DE SESSION
	    	form.setEstado("GE");
	    	form.setUniopeId(new Long(unidadOperativa.getCodigo()));
	    	form.setActiviId(bean.getFormulario().getActiviId());
	    	form.setUnifisId(bean.getFormulario().getUnifisId());
	    	form.setRzonSocial(unidadOperativa.getNombreComercial());
	    	form.setNmroMsaPrtes(nroMesaPartes);
	    	form.setFlag("0");
	    	
	    	form.setFchaCrcion(new Date());
	    	form.setUsrioCrdor(usuario.getCodigoLogin());
	    	//Grabamos
		    genericService.save(form);
	    	service.grabarInformeRespuestasLista(form,lista);
   
		}
    	//ENVIO DE MAILS
		ResourceBundle rb = ResourceBundle.getBundle("gob.osinerg.resources.sendMail");
        String subject = rb.getString("mail.emergencia.subject");
        String mensaje = rb.getString("mail.emergencia.text");
        String fromAdministrador = rb.getString("mail.from.administrador");
        List listEmail = service.getUsuariosParaEnvioMail(bean.getFormulario());
        for (int i=0;i<listEmail.size();i++){
        	Object obj = listEmail.get(i);
        	MailBean mailBean = new MailBean();
        	mailBean.setSubject(subject);
        	mailBean.setMensaje(mensaje);
        	mailBean.setFromMail(fromAdministrador);
        	mailBean.setFromName(" ");
        	mailBean.setToMail(BeanUtils.getProperty(obj, "MAIL"));
        	mailBean.setToName(" ");
        	service.procesarMail(mailBean);
        }
	    
        //ENVIO DE MAIL A SUPERVISOR REGIONAL
        if (bean.getFormulario().getUnifisId().equals("1")){
        	log.debug("Inicio Envio de Mails a Supervisores Regionales");
        	String cadena = service.getZonaFiscaliazable(bean.getUniopeId(),"1");
        	String[] cadenaZonaFis = cadena.split("-");
        	
        	List listaSupervisor = service.getMailSupervisor(cadenaZonaFis[0]);
        	
        	for(int i=0 ;i<listaSupervisor.size();i++){
        		Object obj = listaSupervisor.get(i);
        		MailBean mailBean = new MailBean();
        		mailBean.setSubject(subject);
            	mailBean.setMensaje(mensaje);
            	mailBean.setFromMail(fromAdministrador);
            	mailBean.setFromName(" ");
            	mailBean.setToMail(BeanUtils.getProperty(obj, "MAIL_SPRVSR_RGNAL"));
            	mailBean.setToName(" ");
        		service.procesarMail(mailBean);
        		
        	}
        }
	   
        //SETEAMOS EL FORMULARIO A LA LISTA
        f.setLista(new ArrayList());
        form.setFormulario(bean.getFormulario());
        f.getLista().add(form);
        request.setAttribute("flagConstancia", Boolean.TRUE);
        request.setAttribute("sel", "0");
	   return consultar(actionMapping, actionForm, request, response);
	 
	}
	
    	private void addRespuestasLista(List lista, String opcionName, String valorOpcion) {
    		
    		FormularioEmergDetalle bean = new FormularioEmergDetalle();
        	//String idFormularioEmrg= "0";
    		String[] opt = opcionName.split("_");
    		if (opcionName.equals("map.departamento")){
    			String[] val = valorOpcion.split("_");
    			bean.setValor(val[val.length-3]); // DESCRIPCION
    			//bean.setFrmulrioEmgId(new Long(idFormularioEmrg));//ID FORMULARIO EMERGENCIA
    			bean.setSeccionId(new Long(val[val.length-2]));// SECCION ID
    			bean.setOpcionId(new Long(val[val.length-1]));//OPCION ID
    			lista.add(bean);
    		}else if(opcionName.equals("map.provincia")){
    			String[] val = valorOpcion.split("_");
    			bean.setValor(val[val.length-3]); // DESCRIPCION
    			//bean.setFrmulrioEmgId(new Long(idFormularioEmrg));//ID FORMULARIO EMERGENCIA
    			bean.setSeccionId(new Long(val[val.length-2]));// SECCION ID
    			bean.setOpcionId(new Long(val[val.length-1]));//OPCION ID
    			lista.add(bean);
    		}else if(opcionName.equals("map.distrito")){
    			String[] val = valorOpcion.split("_");
    			bean.setValor(val[val.length-3]); // DESCRIPCION
    			//bean.setFrmulrioEmgId(new Long(idFormularioEmrg));//ID FORMULARIO EMERGENCIA
    			bean.setSeccionId(new Long(val[val.length-2]));// SECCION ID
    			bean.setOpcionId(new Long((val[val.length-1])));//OPCION ID
    			lista.add(bean);
    		}else if (opt.length>3){
    			//TextField, TextArea, ComboBox
    			bean.setFrmulrioEmgId(new Long(opt[1]));//ID FORMULARIO EMERGENCIA
    			bean.setValor(valorOpcion);
    			bean.setSeccionId(new Long(opt[opt.length-2]));
    			bean.setOpcionId(new Long(opt[opt.length-1]));
    			lista.add(bean);
    		}else if (opt.length>2){
    			//SI ES RADIO
    			if(valorOpcion!=null){
    				String[] val= valorOpcion.split("_"); 
    				bean.setFrmulrioEmgId(new Long(opt[1]));
    				bean.setValor(val[1]);//VALOR DE LA OPCION
    				bean.setSeccionId(new Long(opt[opt.length-1]));
    				bean.setOpcionId(new Long(val[0]));//ID DE LA OPCION
    				lista.add(bean);
    			}
    		}
    		
    	}
    public ActionForward generarMesaParte(ActionMapping actionMapping,
                ActionForm actionForm,
                HttpServletRequest request,
                HttpServletResponse response) throws java.lang.Exception {
    	
    	FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		FormularioEmergencia formu = (FormularioEmergencia)f.getBean();
		formu = (FormularioEmergencia) genericService.findById(FormularioEmergencia.class, formu.getId());
		f.setBean(formu);
		
		return actionMapping.findForward("constancia");
    }
    
    public ActionForward reporte(ActionMapping actionMapping,
            ActionForm actionForm,
            HttpServletRequest request,
            HttpServletResponse response) throws java.lang.Exception {
	
		FormularioEmergenciaForm f = (FormularioEmergenciaForm)actionForm;
		String index = request.getParameter("index");
		
		List lista = new ArrayList();
		if(!StringUtils.isEmpty(index)){
			FormularioEmergencia formuEmrg = (FormularioEmergencia)f.getLista().get(Integer.parseInt(index));
			List listaGeneral =service.getListaRespuestasGeneral(formuEmrg.getId());
    		f.setMapa(generarFormularioRespuestas(listaGeneral));
			/*List listaCategorias = service.getCategoriaConsulta(formuEmrg.getId());
			for(int i=0;i<listaCategorias.size();i++){
				Map mapaCategoria = (Map)listaCategorias.get(i);
				List listatemp = new ArrayList();
				List listaSecciones = service.getSeccionConsulta(formuEmrg.getId(), mapaCategoria.get("CAT_ID").toString());
				for(int j=0;j<listaSecciones.size();j++){
					Map mapaSecciones = (Map)listaSecciones.get(j);
					List listaRespuestas = service.getFormularioRespuestas(formuEmrg.getId(), mapaSecciones.get("SECC_ID").toString());
					mapaSecciones.put("lista", listaRespuestas);
					listatemp.add(mapaSecciones);
				}
				mapaCategoria.put("lista", listatemp);
				lista.add(mapaCategoria);
			}*/
			//request.setAttribute("listaCategorias", listaCategorias);
			//f.setLista(listaCategorias);
			request.setAttribute("FormularioEmergencia", formuEmrg);
			//f.setBean(formuEmrg);
			//request.setAttribute("TipoEmergencia", ListToMap(f.getListTipoEmergencia()));
		}
	
		return actionMapping.findForward("reporte");
    }
    
    private Map ListToMap(List lista) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
    	Map mapa = new HashMap();
    	
    	for (int i=0;i<lista.size();i++){
    		Object obj = lista.get(i);
    		mapa.put(BeanUtils.getProperty(obj, "id"), BeanUtils.getProperty(obj, "descripcion"));
    		
    	}
    	
    	return mapa;
    }
    public Map generarFormularioRespuestas(List listaGeneral){
    	Map mapa = new HashMap();
    	List listaCategorias = new ArrayList();
		for(int i=0;i<listaGeneral.size();i++){
			Map data = (Map)listaGeneral.get(i);
			
			if(mapa.get("CAT_" + MapUtils.getString(data, "CAT_ID")) == null){
				Map categoria = new HashMap();
				categoria.put("ID",MapUtils.getString(data, "CAT_ID",""));
				categoria.put("DSCRPCION",MapUtils.getString(data, "CAT_DSCRPCION",""));
				listaCategorias.add(categoria);
				
			}
			
			List listaSecciones = (List)MapUtils.getObject(mapa, "CAT_" + MapUtils.getString(data, "CAT_ID"), new ArrayList());
			
			if(mapa.get("SECC_" + MapUtils.getString(data, "SECC_ID")) ==  null){
				Map seccion = new HashMap();
				seccion.put("ID",MapUtils.getLong(data, "SECC_ID",null));
				seccion.put("DSCRPCION",MapUtils.getString(data, "SECC_DESCRIPCION",""));
				seccion.put("RESPUESTA",MapUtils.getString(data, "RESPUESTA",""));
				listaSecciones.add(seccion);
				mapa.put("CAT_"+MapUtils.getString(data, "CAT_ID"), listaSecciones);
			}			
			
		}
		
		mapa.put("listaCategorias", listaCategorias);
    	
    	return mapa;	
    }
    
    public Map generarFormulario(List listaGeneral){
    	Map mapa = new HashMap();
		List listaCategorias = new ArrayList();
		for(int i=0;i<listaGeneral.size();i++){
			Map data = (Map)listaGeneral.get(i);
			
			if(mapa.get("CAT_" + MapUtils.getString(data, "CAT_ID")) == null){
				Map categoria = new HashMap();
				categoria.put("ID",MapUtils.getString(data, "CAT_ID",""));
				categoria.put("DSCRPCION",MapUtils.getString(data, "CAT_DSCRPCION",""));
				categoria.put("ORDEN",MapUtils.getString(data, "CAT_ORDEN",""));
				categoria.put("FORMU_CAT_ID",MapUtils.getString(data, "FORMU_CAT_ID",""));
				listaCategorias.add(categoria);
				
			}
			
			List listaSecciones = (List)MapUtils.getObject(mapa, "CAT_" + MapUtils.getString(data, "CAT_ID"), new ArrayList());
			
			if(mapa.get("SECC_" + MapUtils.getString(data, "SECC_ID")) ==  null){
				Map seccion = new HashMap();
				seccion.put("ID",MapUtils.getLong(data, "SECC_ID",null));
				seccion.put("DSCRPCION",MapUtils.getString(data, "SECC_DESCRIPCION",""));
				seccion.put("CAT_SECC_ID",MapUtils.getString(data, "CAT_SECC_ID",""));
				listaSecciones.add(seccion);
				mapa.put("CAT_"+MapUtils.getString(data, "CAT_ID"), listaSecciones);
			}
			
			List listaOpciones = (List)MapUtils.getObject(mapa, "SECC_" + MapUtils.getString(data, "SECC_ID"), new ArrayList());
			
			if(mapa.get("OPCION_" + MapUtils.getString(data, "OPCION_ID")) == null){
				Map opcion = new HashMap();
				opcion.put("ID",MapUtils.getString(data, "OPCION_ID",null));
				opcion.put("OPCIONNAME",MapUtils.getString(data, "OPCION_TIPO",null));
				opcion.put("OPCION_ID", MapUtils.getString(data, "OPCION_ID2",null));
				opcion.put("DSCRPCION",MapUtils.getString(data, "OPCION_DSCRPCION",null));
				opcion.put("ORDEN",MapUtils.getString(data, "OPCION_ORDEN",null));
				opcion.put("TIP_OPC_ID",MapUtils.getString(data, "TIPO_OPC_ID",null));
				opcion.put("TAG",MapUtils.getString(data, "TIPO_OPC_TAG",null));
				opcion.put("WIDTH", MapUtils.getString(data, "WIDTH",null));
				opcion.put("HEIGTH", MapUtils.getString(data, "HEIGTH",null));
				opcion.put("MAXLENGTH", MapUtils.getString(data, "MAXLENGTH",null));
				opcion.put("REQUERIDO", MapUtils.getString(data, "REQUERIDO",null));
				opcion.put("CATEGORIA", MapUtils.getString(data, "CAT_DSCRPCION",null));
				listaOpciones.add(opcion);
				mapa.put("SECC_" + MapUtils.getString(data, "SECC_ID"), listaOpciones);
				mapa.put("OPCION_" + MapUtils.getString(data, "OPCION_ID"),  MapUtils.getString(data, "OPCION_ID"));
			}
			
			
		}
		
		mapa.put("listaCategorias", listaCategorias);
    	return mapa;
    }
    
	public void setService(FormularioEmergenciaService service) {
		this.service = service;
	}

	public void setDominioService(DominioService dominioService) {
		this.dominioService = dominioService;
	}

	public void setGenericService(GenericService genericService) {
		this.genericService = genericService;
	}
	
	
}
